package com.example.design_pattern.factory;

// 抽象工厂模式（Abstract Factory）
// 意图: 提供一个创建一系列相关或相互依赖对象的接口，而无需指定它们具体的类。
//
// 使用场景:
// 系统需要独立于它的产品的创建、组合和表示。
// 需要提供一个产品家族的多个变体。

// 实际上，这个例子我没有看太懂
class ProductC{
    // ProductC methods
}

class ProductD{
    // ProductD methods
}

class ProductC1 extends ProductC{
}

class ProductD1 extends ProductD{
}

class ProductC2 extends ProductC{
}

class ProductD2 extends ProductD{
}

// 工厂接口
interface AbstractFactory {
    ProductC createProductC();
    ProductD createProductD();
}

// 具体工厂，专门创建产品A
class ConcreteFactory1 implements AbstractFactory {
    @Override
    public ProductC createProductC() {
        return new ProductC1();
    }

    @Override
    public ProductD createProductD() {
        return new ProductD1();
    }
}

class ConcreteFactory2 implements AbstractFactory {
    @Override
    public ProductC createProductC() {
        return new ProductC2();
    }

    @Override
    public ProductD createProductD() {
        return new ProductD2();
    }
}

public class AbstractFactoryExample {
    public static void main(String[] args) {
        AbstractFactory factory = new ConcreteFactory1();
        ProductC productC = factory.createProductC();
        ProductD productD = factory.createProductD();
        // Use products
    }
}

